package com.example.usercenter.service;

import com.example.usercenter.model.domain.User;
import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;

import java.util.List;

/**
* @author 57017
* @description 针对表【t_user(用户表)】的数据库操作Service
* @createDate 2024-01-17 12:39:34
*/
public interface UserService extends IService<User> {

    /**
     * 注册业务逻辑
     * @param account 账号
     * @param pwd 密码
     * @param rePwd 校验密码
     * @return 0: 注册失败 其他：用户编号
     */
    long userRegister(String account, String pwd, String rePwd);


    /**
     * 用户登录业务逻辑
     * @param account 账号
     * @param pwd 密码
     * @return 脱敏后的用户信息
     */
    User userLogin(String account, String pwd, HttpServletRequest request);

    /**
     * 根据用户名查询用户
     * @param username 用户名
     * @return 用户列表
     */
    List<User> getUsesByUsername(String username);

    /**
     * 删除用户
     * @param userId 用户id
     * @return true: 删除成功，false: 删除失败
     */
    boolean deleteUserById(Integer userId);

    /**
     * 查询匹配全部标签词的用户列表
     * @param tagList 匹配标签列表
     * @return 匹配全部标签词的用户列表
     */
    List<User> matchUsersByTagName(List<String> tagList);

    /**
     * 修改用户信息
     * @param user 需要修改的用户信息
     * @param session session会话
     * @return true: 修改成功 false：修改失败
     */
    boolean editUser(User user, HttpSession session);

    /**
     * 判断当前登录用户是否是管理员
     * @param session session会话
     * @return true: 是管理员 false: 不是管理员
     */
    boolean isAdmin(HttpSession session);

    /**
     * 获取当前登录的用户
     * @param session session会话
     * @return 登录的用户
     */
    User getLoginUser(HttpSession session);

    /**
     * 用户脱敏处理
     * @param dbUser 数据库查询User
     * @return 脱敏后的User
     */
    User getSafetyUser(User dbUser);

    /**
     * 匹配与登录用户标签最相似的前num个用户
     * @param num 匹配用户数目
     * @param loginUser 当前登录用户
     * @return 匹配用户列表
     */
    List<User> matchUserList(int num, User loginUser);
}
